package br.com.post.util;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;

import br.com.post.model.Evaluation;
import br.com.post.model.Profile;
import br.com.post.model.Schooling;
import br.com.post.model.State;
import br.com.post.model.Subject;
import br.com.post.model.Text;
import br.com.post.model.Topic;
import br.com.post.model.User;
import br.com.post.persistence.EvaluationDao;
import br.com.post.persistence.ProfileDao;
import br.com.post.persistence.SchoolingDao;
import br.com.post.persistence.StateDao;
import br.com.post.persistence.SubjectDao;
import br.com.post.persistence.TextDao;
import br.com.post.persistence.TopicDao;
import br.com.post.persistence.UserDao;


public class CriaBanco {
	
	/**
	 * Classe para inicialização do banco, valores default.
	 * Deverá ser feita as chamadas em ordem da restrição de integridade.
	 * Ex: Profile deve ser criado antes de User.
	 * 
	 */
	public static void main (String[] j) {
		//id=1
		createSchooling("Ensino Superior","Ensino Superior");
		//id=2
		createSchooling("Ensino Médio","Ensino Médio");
		//id=3
		createSchooling("Ensino Fundamental","Ensino Fundamental");
		//id=1
		createProfile("Administrador","Perfil de Administrador");
		//id=2
		createProfile("Moderado","Usuário Moderador");
		//id=3
		createProfile("Usuário","Usuário");
		createUser();
		createState();
		createSubject();
		createTopic();
		createText();
		createEvaluation();			
	}
	
	public static void createTopic() {
		
		TopicDao dao = new TopicDao();
		User user= new User();
		Subject subject= new Subject();
		Topic topic = new Topic();
		user.setUser_id(1);
		subject.setSubject_id(1);
		topic.setTopic_name("Topico de Teste");
		topic.setTopic_subject_id(subject);
		topic.setTopic_user_id(user);
		topic.setTopic_view(0);
		DateFormat format = new SimpleDateFormat ("dd/mm/yyyy");
		try {
			topic.setTopic_date_create((Date)format.parse("01/02/1988"));
		} catch(Exception e){}
		// Adiciona ujm tópico no banco 
		dao.createTopic(topic);
	}
	
	public static void createEvaluation() {
		
		EvaluationDao dao = new EvaluationDao();
		User user= new User();
		Text text= new Text();
		Evaluation eval = new Evaluation();
		text.setText_id(1);
		user.setUser_id(1);
		eval.setEval_comment("Objetivo legal!");
		eval.setEval_note(1);
		eval.setEval_text_id(text);
		eval.setEval_user_id(user);
		//Adiciona uma avaliacao no banco
		dao.createEvaluation(eval);
	}
	
	public static void createText() {
		TextDao dao = new TextDao();
		State state = new State();
		Topic topic = new Topic();
		User user= new User();
		user.setUser_id(1);
		state.setState_id(1);
		topic.setTopic_id(1);
		Text text = new Text();
		DateFormat format = new SimpleDateFormat ("dd/mm/yyyy");
		try {
			text.setText_date_register((Date)format.parse("01/02/1988"));
			text.setText_last_modified_date((Date)format.parse("01/02/1988"));
		} catch(Exception e){}
		text.setText_state(state);
		
		text.setText_text("Este é um site que tem como objetivo o aprenedizado de novas tecnologias, desenvolvido "
				   +"por Jonatas Pacheco Ribeiro e Daniel Zupo da Rocha, alunos de ciência da computação na instituição Unicarioca,"
				   +"pelo anseio de dominar tecnologias web escritas em JEE com destreza e eficiência.");
		
		//text.setText_text("Texto de inicialização");
		text.setText_title("Objetivo");
		text.setText_topic_id(topic);
		text.setText_user_id(user);
		//Adiciona um texto no banco
		dao.createText(text);
	}
	
	public static void createSubject() {
		SubjectDao dao = new SubjectDao();
		Subject subject = new Subject();
		subject.setSubject_description("Assunto onde podem ser postados textos poéticos");
		subject.setSubject_name("Poesia");
		//Adiciona Assunto no banco
		dao.createSubject(subject);
	}
	
	public static void createState() {
		StateDao dao = new StateDao();
		State state = new State();
		state.setState_description("Estado de homologação do Texto");
		state.setState_name("Rascunho");
		//Adiciona Estado do post no banco 
		dao.createState(state);
	}
	
	public static void createSchooling(String name, String description) {
		SchoolingDao dao = new SchoolingDao();
		Schooling schooling = new Schooling();
		schooling.setSchooling_description(description);
		schooling.setSchooling_name(name);
		// Adiciona escolaridade no banco
		dao.createSchooling(schooling);
	}
	public static void createProfile(String name, String description) {
		ProfileDao dao = new ProfileDao();
		Profile profile = new Profile();
		profile.setProfile_description(description);
		profile.setProfile_name(name);
		//Adiciona perfil no banco
		dao.createProfile(profile);
	}

	public static void createUser() {
		UserDao dao = new UserDao();
		User usuario = new User();
		DateFormat format = new SimpleDateFormat ("dd/mm/yyyy");
		Profile profile= new Profile();
		profile.setProfile_id(1);
		Schooling schooling= new Schooling();
		schooling.setSchooling_id(1);
		usuario.setUser_active(true);
		try {
			usuario.setUser_date_birth((Date)format.parse("22/09/2008"));
			usuario.setUser_date_register((Date)format.parse("22/09/2008"));
		} catch(Exception e) {}
		usuario.setUser_id(0);
		usuario.setUser_link_photo("");
		usuario.setUser_name("Administrador");
		usuario.setUser_nick("admin");
		usuario.setUser_password("admin1234");
		usuario.setUser_profile(profile);
		usuario.setUser_schooling(schooling);
		// Adiciona o usuario
		dao.createUser(usuario);
	}
}
